package com.daon.common;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @Author 1daon
 * @EMAIL 532418116@qq.com
 * @Version 创建时间：2018/3/13 下午9:48
 * @Modified By 首页要在spring-servlet.xml配置首先被加载
 */
@Component("applicationContextHelper")
public class ApplicationContextHelper implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext context) throws BeansException{
        applicationContext = context;
    }

    /**
     * 获取对应类的上下文，当你想通过spring获取一个你指定的类的实例的时候，而又没有通过spring加载到当前调用的类里面，
     * 例如你在filter里面，可能要对人员角色做判定，此时还没到业务层代码，但是又要访问数据库或其他的服务类。
     * @param clazz
     * @param <T> T 返回值的类型由调用者决定
     * @return
     */
    public static <T> T popBean(Class<T> clazz){
        if(applicationContext == null){
            return null;
        }
        return applicationContext.getBean(clazz);
    }

    public static <T> T popBean(String name, Class<T> clazz){
        if(applicationContext == null){
            return null;
        }
        return applicationContext.getBean(name, clazz);
    }
}
